package algorithm.easy;

/**
 * 给你一个大小为 n x n 的整数矩阵 grid 。
 * <p>
 * 生成一个大小为 (n - 2) x (n - 2) 的整数矩阵  maxLocal ，并满足：
 * <p>
 * maxLocal[i][j] 等于 grid 中以 i + 1 行和 j + 1 列为中心的 3 x 3 矩阵中的 最大值 。
 * 换句话说，我们希望找出 grid 中每个 3 x 3 矩阵中的最大值。
 * <p>
 * 返回生成的矩阵。
 */
public class LargestLocal2373 {

    public int[][] largestLocal(int[][] grid) {
        int[][] arr = new int[grid.length][grid[0].length];
        for (int i = 0; i < grid.length; i++) {
            for (int j = 0; j < grid[i].length; j++) {
                fill(arr,i,j,grid[i][j]);
            }
        }
        int[][] res = new int[grid.length - 2][grid.length - 2];
        for (int i = 1; i < arr.length-1; i++) {
            for (int j = 1; j < arr.length-1; j++) {
                res[i - 1][j - 1] = arr[i][j];
            }
        }
        return res;
    }

    public void fill(int[][] arr, int i, int j, int num) {
        for (int x = i - 1; x < i + 2; x++) {
            for (int y = j - 1; y < j + 2; y++) {
                if (x < 0 || y < 0) continue;
                if (x >= arr.length || y >= arr.length) continue;
                arr[x][y] = Math.max(arr[x][y], num);
            }
        }
    }
}
